// -*- coding: utf-8 -*- 
/**
 * Project: LanQiao
 *
 * @author: yanking
 * Create time: 2022-03-14 21:02
 * IDE: IntelliJ IDEA
 * Introduction:
 */
package com.train;


import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.JPEGEncodeParam;
import org.junit.jupiter.api.Test;

import javax.media.jai.JAI;
import javax.media.jai.RenderedOp;
import java.io.*;

@SuppressWarnings("ALL")
public class TiffTuanJPG {

    /**
     * 将 tiff 转换 jpg 格式
     *
     * @param filePath
     * @return
     */
    public static String tiffTuanJPG(String filePath, String destPath) {
        String format = filePath.substring(filePath.lastIndexOf(".") + 1);
        //String turnJpgFile = filePath.replace("tif", "jpg");
        File file = new File(filePath);
        String fn = file.getName();
        String turnJpgFile = destPath + "\\" + fn.replace("tif", "jpg");

        if ("tif".equals(format)) {
            File fileTiff = new File(turnJpgFile);
            if (fileTiff.exists()) {
                // 已经存在当前图片的jpg格式
                System.out.println("该tif文件已经转换为 JPG 文件：" + turnJpgFile);
                return turnJpgFile;
            }
            //读取iff文件
            RenderedOp rd = JAI.create("fileload", filePath);
            OutputStream ops = null;
            try {
                ops = new FileOutputStream(turnJpgFile);
                //文件存储输出流
                JPEGEncodeParam param = new JPEGEncodeParam();
                //指定输出格式
                ImageEncoder image = ImageCodec.createImageEncoder("JPEG", ops, param);
                image.encode(rd);
                //解析输出流进行输出
                ops.close();
                System.out.println("tif转换jpg成功:" + filePath);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return turnJpgFile;
    }


    /**
     * 转换图片到指定目录
     *
     * @param filePath
     * @return
     */
    public static String tiffTuanJPGUpdate(String filePath) {
        String format = filePath.substring(filePath.lastIndexOf(".") + 1);
        String turnJpgFile = filePath.replace("tif", "jpg");
        if ("tif".equals(format)) {
            File fileTiff = new File(turnJpgFile);
            if (fileTiff.exists()) {
                System.out.println("该tif文件已经转换为 JPG 文件：" + turnJpgFile);
                return turnJpgFile;
            }
            //读取iff文件
            RenderedOp rd = JAI.create("fileload", filePath);
            OutputStream ops = null;
            try {
                ops = new FileOutputStream(turnJpgFile);
                //文件存储输出流
                JPEGEncodeParam param = new JPEGEncodeParam();
                //指定输出格式
                ImageEncoder image = ImageCodec.createImageEncoder("JPEG", ops, param);
                image.encode(rd);
                //解析输出流进行输出
                ops.close();
                System.out.println("tif转换jpg成功:" + filePath);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return turnJpgFile;
    }


    @Test
    /**
     * 批量转化tif图片为jpg
     */
    public void BPPIC() {
        String filePath = "C:\\Users\\319-7\\Desktop\\新建文件夹\\转格式\\iris0108_LAN_R_04_Flow_42_all_afterseg";
        String destPath = "C:\\Users\\319-7\\Desktop\\新建文件夹\\转格式\\PROCESSPIC";
        File[] fileName = getFileName(filePath);
        for (int i = 0; i < fileName.length; i++) {
            tiffTuanJPG(fileName[i].getPath(), destPath);
        }
        System.out.println("Programe Over!");
    }

    @Test
    public File[] getFileName(String filePath) {
        /**
         * 批量获取文件夹中路径名并且进行批量处理
         */
        //获取文件路径文件夹下的全部文件列表
        System.out.println("文件有如下：");
        //表示一个文件路径
        File file = new File(filePath);
        //用数组把文件夹下的文件存起来
        File[] files = file.listFiles();
        //foreach遍历数组
   /*     for (File file2 : files) {
            //打印文件列表：只读取名称使用getName();
            System.out.println("路径：" + file2.getPath());
            System.out.println("文件夹/文件名：" + file2.getName());
        }*/
        return files;
    }


}
